package com.xie.leetcode.math;

//400. 第 N 位数字
//        给你一个整数 n ，请你在无限的整数序列 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...] 中找出并返回第 n 位数字。
//
//
//
//        示例 1：
//
//        输入：n = 3
//        输出：3
//        示例 2：
//
//        输入：n = 11
//        输出：0
//        解释：第 11 位数字在序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ... 里是 0 ，它是 10 的一部分。
//
//
//        提示：
//
//        1 <= n <= 231 - 1

/**
 * @author xiezhendong
 * @date 2021/11/30
 */
public class FindNthDigit {

    public static void main(String[] args) {
        FindNthDigit findNthDigit = new FindNthDigit();
        System.out.println(findNthDigit.findNthDigit(10000000));
        System.out.println(findNthDigit.findNthDigit(3));
        System.out.println(findNthDigit.findNthDigit(11));
        System.out.println(findNthDigit.findNthDigit(10));
        System.out.println(findNthDigit.findNthDigit(1111));
        System.out.println(findNthDigit.findNthDigit(11111));
        System.out.println(findNthDigit.findNthDigit(111111));
        System.out.println(findNthDigit.findNthDigit(1111111));
        System.out.println(findNthDigit.findNthDigit(11111111));
        System.out.println(findNthDigit.findNthDigit(111111111));
    }

    public int findNthDigit(int n) {
        if (n < 10) {
            return n;
        }
        long pre = 1L;
        int numIndex = 1;
        long tenNum = 9;
        long sum = 9;
        while (n > sum) {
            pre = sum + 1;
            numIndex++;
            tenNum *= 10;
            sum = pre + numIndex * tenNum - 1;
        }
        int tarValue = (int) ((n - pre) / numIndex + tenNum / 9);
        System.out.println("tarValue:" + tarValue);
        int index = (int) (numIndex - (n - pre) % numIndex);
        if (index == numIndex){
            index = 0;
        }
        System.out.println("index:" + index);
        for (int i = 1; i < index; i++) {
            tarValue /= 10;
        }
        return tarValue % 10;
    }
}
